#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <time.h>
#include "uane.h"


// 使用select实现读取串口，如果有数据就写入到串口
int main()
{
    int fd;
    char buff[BUFFER_SIZE];

    fd_set inset1;
    struct timeval tv;


    // 打开串口
    if((fd = open_port(1)) < 0)
    {
        perror("open_port error");
        return -1;
    }

    // 配置串口
    if((set_opt(fd, 115200, 8, 'N', '1')) < 0)
    { 
        perror("set_opt error");
        return -1;
    }

    // 初始化读集合inset1，并在集合中加入相应的描述集合
    FD_ZERO(&inset1);
    FD_SET(fd,&inset1);


    // 循环测试该文件描述符是否就绪，调用select函数对相关文件描述符做出操作
    while (1)
    {
        tv.tv_sec = 20;
        tv.tv_usec = 0;
        if (FD_ISSET(fd,&inset1))
        {
            if (select(fd+1, &inset1, (fd_set *)0, (fd_set *)0, &tv) < 0)
            {
                perror("select");
            }
            else
            {
                if ( (read(fd, buff, BUFFER_SIZE)) > 0 )
                {
                    write(fd, buff, strlen(buff));
                    tcpClient_input_send("169.254.21.45","9999",buff);  
                }
            }
        }
    }
    close(fd);
    return 1;
}


int modbus_mapping_t()
{
// 各寄存器分别申请100各地址单元
modbus_mapping_t *mb_mapping;
mb_mapping = modbus_mapping_new(100,100,100,100);

// 设置线圈各寄存器的值
mb_mapping -> tab_bits[0] = 0x00;
mb_mapping -> tab_bits[1] = 0x01;
mb_mapping -> tab_bits[2] = 0x01;

// 设置离散输入寄存器的值
mb_mapping -> tab_input_bits[0] = 0x00;
mb_mapping -> tab_input_bits[1] = 0x00;
mb_mapping -> tab_input_bits[2] = 0x01;

// 设置输入寄存器的值
mb_mapping -> tab_input_registers[0] = 2;       // 设置地址0的值
mb_mapping -> tab_input_registers[11] = 12;     // 设置地址8的值

......

// 程序结束时需释放内存
modbus_mapping_free(mb_mapping);
}

int modbus_set_slave()
{
    modbus_t *ctx;

    ctx = modbus_new_rtu("COM4", 115200, 'N', 8, 1);
    if(ctx == NULL)
    {
        fprintf(stderr, "Unable to create the libmodbus context\n");
        return -1;
    }
    






}